# Date: 2023-5-13
# Author: Generated by GoCodeo.
import json
from io import BytesIO
from unittest.mock import MagicMock, patch

import pytest

from autogpt.commands.audio_text import read_audio

patch_func1 = "autogpt.commands.audio_text.CFG"


class TestReadAudio:
    @patch("requests.post")
    def test_positive_read_audio(self, mock_post):
        # Positive Test
        audio_data = b"test_audio_data"
        mock_response = MagicMock()
        mock_response.content.decode.return_value = json.dumps(
            {"text": "Hello, world!"}
        )
        mock_post.return_value = mock_response
        with patch(patch_func1) as mock_cfg:
            mock_cfg.huggingface_api_token = "testing-token"
            result = read_audio(audio_data)
            assert result == "The audio says: Hello, world!"
            mock_post.assert_called_once_with(
                f"https://api-inference.huggingface.co/models/{mock_cfg.huggingface_audio_to_text_model}",
                headers={"Authorization": f"Bearer {mock_cfg.huggingface_api_token}"},
                data=audio_data,
            )

    @patch("requests.post")
    def test_negative_read_audio(self, mock_post):
        # Negative Test
        audio_data = b"test_audio_data"
        mock_response = MagicMock()
        mock_response.content.decode.return_value = json.dumps({"text": ""})
        mock_post.return_value = mock_response
        with patch(patch_func1) as mock_cfg:
            mock_cfg.huggingface_api_token = "testing-token"
            result = read_audio(audio_data)
            assert result == "The audio says: "
            mock_post.assert_called_once_with(
                f"https://api-inference.huggingface.co/models/{mock_cfg.huggingface_audio_to_text_model}",
                headers={"Authorization": f"Bearer {mock_cfg.huggingface_api_token}"},
                data=audio_data,
            )

    def test_error_read_audio(self):
        # Error Test
        with patch(patch_func1) as mock_cfg:
            mock_cfg.huggingface_api_token = None
            with pytest.raises(ValueError):
                read_audio(b"test_audio_data")

    def test_edge_read_audio_empty_audio(self):
        # Edge Test
        with pytest.raises(ValueError):
            read_audio(b"")
